decidim-proposals 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/proposals/admin/create_proposal.rb +4 -1
  3. data/app/commands/decidim/proposals/create_proposal.rb +4 -1
  4. data/app/controllers/decidim/proposals/admin/proposals_controller.rb +4 -0
  5. data/app/controllers/decidim/proposals/proposals_controller.rb +12 -6
  6. data/app/forms/decidim/proposals/admin/proposal_form.rb +13 -2
  7. data/app/forms/decidim/proposals/proposal_form.rb +13 -2
  8. data/app/helpers/decidim/proposals/application_helper.rb +3 -0
  9. data/app/helpers/decidim/proposals/map_helper.rb +19 -0
  10. data/app/helpers/decidim/proposals/proposal_order_helper.rb +16 -0
  11. data/app/models/decidim/proposals/abilities/admin_user.rb +2 -0
  12. data/app/models/decidim/proposals/abilities/current_user.rb +3 -0
  13. data/app/models/decidim/proposals/abilities/process_admin_user.rb +2 -1
  14. data/app/models/decidim/proposals/proposal.rb +12 -3
  15. data/app/services/decidim/proposals/proposal_search.rb +0 -5
  16. data/app/views/decidim/proposals/admin/proposal_answers/edit.html.erb +1 -1
  17. data/app/views/decidim/proposals/admin/proposals/_form.html.erb +8 -2
  18. data/app/views/decidim/proposals/admin/proposals/index.html.erb +12 -14
  19. data/app/views/decidim/proposals/proposals/_filters.html.erb +2 -2
  20. data/app/views/decidim/proposals/proposals/_filters_small_view.html.erb +1 -1
  21. data/app/views/decidim/proposals/proposals/_proposals.html.erb +1 -1
  22. data/app/views/decidim/proposals/proposals/_tags.html.erb +1 -1
  23. data/app/views/decidim/proposals/proposals/index.html.erb +27 -0
  24. data/app/views/decidim/proposals/proposals/new.html.erb +8 -2
  25. data/app/views/decidim/proposals/proposals/show.html.erb +18 -1
  26. data/config/i18n-tasks.yml +3 -1
  27. data/config/locales/ca.yml +11 -8
  28. data/config/locales/en.yml +9 -6
  29. data/config/locales/es.yml +14 -11
  30. data/config/locales/eu.yml +119 -1
  31. data/config/locales/fi.yml +143 -0
  32. data/db/migrate/20170215113152_create_proposal_reports.rb +14 -0
  33. data/db/migrate/20170215131720_add_report_count_to_proposals.rb +5 -0
  34. data/db/migrate/20170215132030_add_reference_to_proposals.rb +7 -0
  35. data/db/migrate/20170220152416_add_hidden_at_to_proposals.rb +5 -0
  36. data/db/migrate/20170228105156_add_geolocalization_fields_to_proposals.rb +7 -0
  37. data/db/migrate/20170307085300_migrate_proposal_reports_data_to_reports.rb +26 -0
  38. data/lib/decidim/proposals/feature.rb +4 -3
  39. data/lib/decidim/proposals/test/factories.rb +8 -0
  40. metadata +25 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1fa61b404c05485715f4617683618718c79f9a92
4
- data.tar.gz: 3afb55cb4acae13ff3f0a63cd74432eb67c8cc6f
3
+ metadata.gz: 656e8df89f7b5ea02254e410d14a3df00eaa09fa
4
+ data.tar.gz: 38eb1d3a952dd96d9172a1e3fc4bf1efa3dc8e32
5
5
  SHA512:
6
- metadata.gz: f9927865a15b7e1310566776820ffd86fa29788fa6db29dc0c030afd681f7055f1991e8c031a043ee80d2219698440c25d2d80ff796b2a112319cd551f7f0445
7
- data.tar.gz: 9e56593a4e2fc70245eb0c91d60e3172938c3b9932725ef94e385e8ce2dae2522f49d24ac950b38b25e0b1e920f8036bb09fa9dfd09272c08b54dc573d93710b
6
+ metadata.gz: 23eddcced0afdb41078c2af58a3e89762d424da02406a34eb44af66f174a062e2df76898ded03d0c4723892d248ebaf7307f11694686e6f864a6c193c6d4bd37
7
+ data.tar.gz: 2884c6ef31744369f99efc80afb34556e100e225f45af3410949478832598669c9c941f7cfd2b75b49e490b1bcdd9fb682e3913e59538a41bc9820ea68738ebc
@@ -34,7 +34,10 @@ module Decidim
34
34
  body: form.body,
35
35
  category: form.category,
36
36
  scope: form.scope,
37
- feature: form.feature
37
+ feature: form.feature,
38
+ address: form.address,
39
+ latitude: form.latitude,
40
+ longitude: form.longitude
38
41
  )
39
42
  end
40
43
  end
@@ -37,7 +37,10 @@ module Decidim
37
37
  scope: form.scope,
38
38
  author: @current_user,
39
39
  decidim_user_group_id: form.user_group_id,
40
- feature: form.feature
40
+ feature: form.feature,
41
+ address: form.address,
42
+ latitude: form.latitude,
43
+ longitude: form.longitude
41
44
  )
42
45
  end
43
46
  end
@@ -34,6 +34,10 @@ module Decidim
34
34
  def proposals
35
35
  @proposals ||= Proposal.where(feature: current_feature)
36
36
  end
37
+
38
+ def proposal
39
+ @proposal ||= Proposal.where(feature: current_feature).find(params[:id])
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -7,17 +7,14 @@ module Decidim
7
7
  include FormFactory
8
8
  include FilterResource
9
9
 
10
- helper_method :order, :random_seed
10
+ helper_method :order, :random_seed, :geocoded_proposals
11
11
 
12
12
  before_action :authenticate_user!, only: [:new, :create]
13
13
 
14
- def show
15
- @proposal = Proposal.where(feature: current_feature).find(params[:id])
16
- end
17
-
18
14
  def index
19
15
  @proposals = search
20
16
  .results
17
+ .not_hidden
21
18
  .includes(:author)
22
19
  .includes(:category)
23
20
  .includes(:scope)
@@ -35,6 +32,11 @@ module Decidim
35
32
  end
36
33
  end
37
34
 
35
+ def show
36
+ @proposal = Proposal.not_hidden.where(feature: current_feature).find(params[:id])
37
+ @report_form = form(Decidim::ReportForm).from_params(reason: "spam")
38
+ end
39
+
38
40
  def new
39
41
  authorize! :create, Proposal
40
42
 
@@ -86,6 +88,10 @@ module Decidim
86
88
  end
87
89
  end
88
90
 
91
+ def geocoded_proposals
92
+ @geocoded_proposals ||= search.results.not_hidden.select(&:geocoded?)
93
+ end
94
+
89
95
  def search_klass
90
96
  ProposalSearch
91
97
  end
@@ -97,7 +103,7 @@ module Decidim
97
103
  activity: "",
98
104
  category_id: "",
99
105
  state: "all",
100
- scope_id: "",
106
+ scope_id: nil,
101
107
  related_to: ""
102
108
  }
103
109
  end
@@ -8,15 +8,26 @@ module Decidim
8
8
 
9
9
  attribute :title, String
10
10
  attribute :body, String
11
+ attribute :address, String
12
+ attribute :latitude, Float
13
+ attribute :longitude, Float
11
14
  attribute :category_id, Integer
12
15
  attribute :scope_id, Integer
13
16
 
14
17
  validates :title, :body, presence: true
18
+ validates :address, geocoding: true, if: -> { current_feature.settings.geocoding_enabled? }
15
19
  validates :category, presence: true, if: ->(form) { form.category_id.present? }
16
20
  validates :scope, presence: true, if: ->(form) { form.scope_id.present? }
17
21
 
18
22
  delegate :categories, to: :current_feature, prefix: false
19
- delegate :scopes, to: :current_organization, prefix: false
23
+
24
+ def organization_scopes
25
+ current_organization.scopes
26
+ end
27
+
28
+ def process_scope
29
+ current_feature.participatory_process.scope
30
+ end
20
31
 
21
32
  alias feature current_feature
22
33
 
@@ -31,7 +42,7 @@ module Decidim
31
42
  #
32
43
  # Returns a Decidim::Scope
33
44
  def scope
34
- @scope ||= scopes.where(id: scope_id).first
45
+ @scope ||= process_scope || organization_scopes.where(id: scope_id).first
35
46
  end
36
47
  end
37
48
  end
@@ -7,6 +7,9 @@ module Decidim
7
7
 
8
8
  attribute :title, String
9
9
  attribute :body, String
10
+ attribute :address, String
11
+ attribute :latitude, Float
12
+ attribute :longitude, Float
10
13
  attribute :category_id, Integer
11
14
  attribute :scope_id, Integer
12
15
  attribute :user_group_id, Integer
@@ -14,11 +17,19 @@ module Decidim
14
17
  validates :title, :body, presence: true, etiquette: true
15
18
  validates :title, length: { maximum: 150 }
16
19
  validates :body, length: { maximum: 500 }, etiquette: true
20
+ validates :address, geocoding: true, if: -> { current_feature.settings.geocoding_enabled? }
17
21
  validates :category, presence: true, if: ->(form) { form.category_id.present? }
18
22
  validates :scope, presence: true, if: ->(form) { form.scope_id.present? }
19
23
 
20
24
  delegate :categories, to: :current_feature
21
- delegate :scopes, to: :current_organization
25
+
26
+ def organization_scopes
27
+ current_organization.scopes
28
+ end
29
+
30
+ def process_scope
31
+ current_feature.participatory_process.scope
32
+ end
22
33
 
23
34
  alias feature current_feature
24
35
 
@@ -33,7 +44,7 @@ module Decidim
33
44
  #
34
45
  # Returns a Decidim::Scope
35
46
  def scope
36
- @scope ||= scopes.where(id: scope_id).first
47
+ @scope ||= process_scope || organization_scopes.where(id: scope_id).first
37
48
  end
38
49
  end
39
50
  end
@@ -7,6 +7,9 @@ module Decidim
7
7
  include Decidim::Comments::CommentsHelper
8
8
  include PaginateHelper
9
9
  include ProposalVotesHelper
10
+ include ProposalOrderHelper
11
+ include Decidim::MapHelper
12
+ include Decidim::Proposals::MapHelper
10
13
 
11
14
  # Public: The state of a proposal in a way a human can understand.
12
15
  #
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Proposals
4
+ # This helper include some methods for rendering proposals dynamic maps.
5
+ module MapHelper
6
+ # Serialize a collection of geocoded proposals to be used by the dynamic map component
7
+ #
8
+ # geocoded_proposals - A collection of geocoded proposals
9
+ def proposals_data_for_map(geocoded_proposals)
10
+ geocoded_proposals.map do |proposal|
11
+ proposal.slice(:latitude, :longitude, :address).merge(title: proposal.title,
12
+ body: truncate(proposal.body, length: 100),
13
+ icon: icon("proposals", width: 40, height: 70, remove_icon_class: true),
14
+ link: proposal_path(proposal))
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ module Decidim
3
+ module Proposals
4
+ # Simple helpers to handle proposals ordering
5
+ module ProposalOrderHelper
6
+ # Returns the options the user will see to order proposals
7
+ def order_fields
8
+ @order_fields ||= begin
9
+ order_fields = [:random, :recent]
10
+ order_fields << :most_voted if current_settings.votes_enabled?
11
+ order_fields
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -16,6 +16,8 @@ module Decidim
16
16
  @context = context
17
17
 
18
18
  can :manage, Proposal
19
+ can :unreport, Proposal
20
+ can :hide, Proposal
19
21
  cannot :create, Proposal unless can_create_proposal?
20
22
  cannot :update, Proposal unless can_update_proposal?
21
23
  end
@@ -24,6 +24,9 @@ module Decidim
24
24
  end
25
25
 
26
26
  can :create, Proposal if authorized?(:create) && creation_enabled?
27
+
28
+ can :report, Proposal
29
+ can :report, Decidim::Comments::Comment
27
30
  end
28
31
 
29
32
  private
@@ -18,7 +18,8 @@ module Decidim
18
18
  can :manage, Proposal do |proposal|
19
19
  participatory_processes.include?(proposal.feature.participatory_process)
20
20
  end
21
-
21
+ can :unreport, Proposal
22
+ can :hide, Proposal
22
23
  cannot :create, Proposal unless can_create_proposal?
23
24
  cannot :update, Proposal unless can_update_proposal?
24
25
  end
@@ -7,7 +7,9 @@ module Decidim
7
7
  include Decidim::Authorable
8
8
  include Decidim::HasFeature
9
9
  include Decidim::HasScope
10
+ include Decidim::HasReference
10
11
  include Decidim::HasCategory
12
+ include Decidim::Reportable
11
13
  include Decidim::Comments::Commentable
12
14
 
13
15
  feature_manifest_name "proposals"
@@ -16,8 +18,10 @@ module Decidim
16
18
 
17
19
  validates :title, :body, presence: true
18
20
 
19
- scope :accepted, -> { where(state: "accepted") }
20
- scope :rejected, -> { where(state: "rejected") }
21
+ geocoded_by :address, http_headers: lambda { |proposal| { "Referer" => proposal.feature.organization.host } }
22
+
23
+ scope :accepted, -> { where(state: "accepted") }
24
+ scope :rejected, -> { where(state: "rejected") }
21
25
 
22
26
  def author_name
23
27
  user_group&.name || author&.name || I18n.t("decidim.proposals.models.proposal.fields.official_proposal")
@@ -62,7 +66,7 @@ module Decidim
62
66
 
63
67
  # Public: Overrides the `accepts_new_comments?` Commentable concern method.
64
68
  def accepts_new_comments?
65
- commentable? && !feature.active_step_settings.comments_blocked
69
+ commentable? && !feature.active_step_settings.comments_blocked
66
70
  end
67
71
 
68
72
  # Public: Overrides the `comments_have_alignment?` Commentable concern method.
@@ -74,6 +78,11 @@ module Decidim
74
78
  def comments_have_votes?
75
79
  true
76
80
  end
81
+
82
+ # Public: Overrides the `reported_content` Reportable concern method.
83
+ def reported_content
84
+ "<h3>#{title}</h3><p>#{body}</p>"
85
+ end
77
86
  end
78
87
  end
79
88
  end
@@ -44,11 +44,6 @@ module Decidim
44
44
  end
45
45
  end
46
46
 
47
- # Handle the scope_id filter
48
- def search_scope_id
49
- query.where(decidim_scope_id: scope_id)
50
- end
51
-
52
47
  # Handle the state filter
53
48
  def search_state
54
49
  if state == "accepted"
@@ -6,7 +6,7 @@
6
6
  </div>
7
7
 
8
8
  <div class="field">
9
- <%= f.translated :text_area, :answer, autofocus: true, rows: 15 %>
9
+ <%= f.translated :editor, :answer, autofocus: true, rows: 15 %>
10
10
  </div>
11
11
 
12
12
  <div class="actions">
@@ -6,14 +6,20 @@
6
6
  <%= form.text_area :body, rows: 10 %>
7
7
  </div>
8
8
 
9
+ <% if feature_settings.geocoding_enabled? %>
10
+ <div class="field">
11
+ <%= form.text_field :address %>
12
+ </div>
13
+ <% end %>
14
+
9
15
  <% if @form.categories&.any? %>
10
16
  <div class="field">
11
17
  <%= form.categories_select :category_id, @form.categories, prompt: t(".select_a_category") %>
12
18
  </div>
13
19
  <% end %>
14
20
 
15
- <% if @form.scopes&.any? && feature_settings.scoped_proposals_enabled %>
21
+ <% if !@form.process_scope %>
16
22
  <div class="field">
17
- <%= form.select :scope_id, @form.scopes.map{|s| [s.name, s.id]}, prompt: t(".select_a_scope") %>
23
+ <%= form.collection_select :scope_id, organization_scopes, :id, :name %>
18
24
  </div>
19
25
  <% end %>
@@ -1,19 +1,17 @@
1
1
  <h2><%= t(".title") %></h2>
2
2
 
3
- <% if feature_settings.official_proposals_enabled %>
4
- <div class="actions title">
3
+ <div class="actions title">
4
+ <% if feature_settings.official_proposals_enabled %>
5
5
  <%= link_to t("actions.new", scope: "decidim.proposals", name: t("models.proposal.name", scope: "decidim.proposals.admin")), new_proposal_path, class: 'new' if can? :manage, current_feature %>
6
- </div>
7
- <% end %>
6
+ <% end %>
7
+ </div>
8
8
 
9
9
  <table class="stack">
10
10
  <thead>
11
11
  <tr>
12
12
  <th><%= t("models.proposal.fields.title", scope: "decidim.proposals") %></th>
13
13
  <th><%= t("models.proposal.fields.category", scope: "decidim.proposals") %></th>
14
- <% if feature_settings.scoped_proposals_enabled %>
15
- <th><%= t("models.proposal.fields.scope", scope: "decidim.proposals") %></th>
16
- <% end %>
14
+ <th><%= t("models.proposal.fields.scope", scope: "decidim.proposals") %></th>
17
15
  <th><%= t("models.proposal.fields.state", scope: "decidim.proposals") %></th>
18
16
  <th class="actions"><%= t("actions.title", scope: "decidim.proposals") %></th>
19
17
  </tr>
@@ -29,13 +27,13 @@
29
27
  <%= translated_attribute proposal.category.name %>
30
28
  <% end %>
31
29
  </td>
32
- <% if feature_settings.scoped_proposals_enabled %>
33
- <td>
34
- <% if proposal.scope %>
35
- <%= translated_attribute proposal.scope.name %>
36
- <% end %>
37
- </td>
38
- <% end %>
30
+ <td>
31
+ <% if proposal.scope %>
32
+ <%= proposal.scope.name %>
33
+ <% else %>
34
+ <%= t("decidim.participatory_processes.scopes.global") %>
35
+ <% end %>
36
+ </td>
39
37
  <td>
40
38
  <%= humanize_proposal_state proposal.state %>
41
39
  </td>
@@ -28,8 +28,8 @@
28
28
  <%= form.collection_check_boxes :activity, [["voted", t('.voted')]], :first, :last, legend_title: t('.activity') %>
29
29
  <% end %>
30
30
 
31
- <% if current_organization.scopes.any? && feature_settings.scoped_proposals_enabled %>
32
- <%= form.collection_check_boxes :scope_id, current_organization.scopes, lambda {|scope| scope.id.to_s}, :name, legend_title: t('.scopes') %>
31
+ <% if current_organization.scopes.any? && !current_participatory_process.scope %>
32
+ <%= form.collection_check_boxes :scope_id, search_organization_scopes, lambda {|scope| scope.id.to_s}, :name, legend_title: t('.scopes') %>
33
33
  <% end %>
34
34
 
35
35
  <% if current_feature.categories.any? %>
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div class="reveal" id="filter-box" data-reveal>
9
9
  <div class="reveal__header">
10
- <h3 class="reveal__title"><%= t ".filter_for" %>:</h3>
10
+ <h3 class="reveal__title"><%= t ".filter_by" %>:</h3>
11
11
  <button class="close-button" data-close aria-label="<%= t(".close_modal") %>" type="button">
12
12
  <span aria-hidden="true">&times;</span>
13
13
  </button>
@@ -1,4 +1,4 @@
1
- <%= order_selector [:random, :most_voted, :recent], i18n_scope: "decidim.proposals.proposals.orders" %>
1
+ <%= order_selector order_fields, i18n_scope: "decidim.proposals.proposals.orders" %>
2
2
  <div class="row small-up-1 medium-up-2 card-grid">
3
3
  <%= render @proposals %>
4
4
  </div>
@@ -3,7 +3,7 @@
3
3
  <% if proposal.category.present? %>
4
4
  <li><%= link_to translated_attribute(proposal.category.name), decidim_proposals.proposals_path(filter: { category_id: proposal.category.id }) %></li>
5
5
  <% end %>
6
- <% if proposal.scope.present? && feature_settings.scoped_proposals_enabled %>
6
+ <% if proposal.scope.present? && !current_participatory_process.scope %>
7
7
  <li><%= link_to proposal.scope.name, decidim_proposals.proposals_path(filter: { scope_id: [proposal.scope.id] }) %></li>
8
8
  <% end %>
9
9
  </ul>
@@ -1,3 +1,30 @@
1
+ <% if feature_settings.geocoding_enabled? %>
2
+ <%= dynamic_map_for proposals_data_for_map(geocoded_proposals) do %>
3
+ <template id="marker-popup">
4
+ <div class="map-info__content">
5
+ <h3>${title}</h3>
6
+ <div id="bodyContent">
7
+ <p>{{html body}}</p>
8
+ <div class="map__date-adress">
9
+ <div class="address card__extra">
10
+ <div class="address__icon">{{html icon}}</div>
11
+ <div class="address__details">
12
+ <span>${address}</span><br />
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <div class="map-info__button">
17
+ <a href="${link}" class="button button--sc">
18
+ <%= t('.view_proposal') %>
19
+ </a>
20
+ </div>
21
+ </div>
22
+ </div>
23
+ </template>
24
+ <%= stylesheet_link_tag "decidim/map" %>
25
+ <%= javascript_include_tag "decidim/map" %>
26
+ <% end %>
27
+ <% end %>
1
28
  <%= render partial: "votes_limit" %>
2
29
  <div class="row columns">
3
30
  <div class="title-action">
@@ -18,15 +18,21 @@
18
18
  <%= form.text_area :body, rows: 10 %>
19
19
  </div>
20
20
 
21
+ <% if feature_settings.geocoding_enabled? %>
22
+ <div class="field">
23
+ <%= form.text_field :address %>
24
+ </div>
25
+ <% end %>
26
+
21
27
  <% if @form.categories&.any? %>
22
28
  <div class="field">
23
29
  <%= form.categories_select :category_id, @form.categories, prompt: t(".select_a_category") %>
24
30
  </div>
25
31
  <% end %>
26
32
 
27
- <% if @form.scopes&.any? && feature_settings.scoped_proposals_enabled %>
33
+ <% if !@form.process_scope %>
28
34
  <div class="field">
29
- <%= form.select :scope_id, @form.scopes.map{|s| [s.name, s.id]}, prompt: t(".select_a_scope") %>
35
+ <%= form.collection_select :scope_id, organization_scopes, :id, :name %>
30
36
  </div>
31
37
  <% end %>
32
38
 
@@ -19,6 +19,11 @@
19
19
  </span>
20
20
  </div>
21
21
  </div>
22
+ <div class="author-data__extra">
23
+ <button type="button" data-open="<%= current_user.present? ? 'flagModal' : 'loginModal' %>" title="<%= t('.report') %>" aria-controls="<%= current_user.present? ? 'flagModal' : 'loginModal' %>" aria-haspopup="true" tabindex="0">
24
+ <%= icon "flag", aria_label: t('.report'), class: 'icon--small' %>
25
+ </button>
26
+ </div>
22
27
  </div>
23
28
  </div>
24
29
  <div class="row">
@@ -35,12 +40,16 @@
35
40
  </div>
36
41
  </div>
37
42
  <% end %>
43
+ <%= feature_reference(@proposal) %>
38
44
  <%= render partial: "decidim/shared/share_modal" %>
39
45
  </div>
40
46
  <div class="columns mediumlarge-8 mediumlarge-pull-4">
41
47
  <div class="section">
42
48
  <%= render partial: "proposal_badge", locals: { proposal: @proposal } %>
43
49
  <p><%= @proposal.body %></p>
50
+ <% if feature_settings.geocoding_enabled? %>
51
+ <%= render partial: "decidim/shared/static_map", locals: { icon_name: "proposals", geolocalizable: @proposal } %>
52
+ <% end %>
44
53
  <%= render partial: "tags", locals: { proposal: @proposal } %>
45
54
  </div>
46
55
  <% if @proposal.answered? && translated_attribute(@proposal.answer).present? %>
@@ -48,7 +57,7 @@
48
57
  <div class="section">
49
58
  <div class="callout success">
50
59
  <h5><%= t(".proposal_accepted_reason") %></h5>
51
- <p><%= translated_attribute @proposal.answer %></p>
60
+ <p><%== translated_attribute @proposal.answer %></p>
52
61
  </div>
53
62
  </div>
54
63
  <% else %>
@@ -70,3 +79,11 @@
70
79
 
71
80
  <%= javascript_include_tag "decidim/proposals/social_share" %>
72
81
  <%= stylesheet_link_tag "decidim/proposals/social_share" %>
82
+
83
+ <%=
84
+ render partial: "decidim/shared/flag_modal", locals: {
85
+ reportable: @proposal,
86
+ form: @report_form,
87
+ url: decidim.report_path(sgid: @proposal.to_sgid.to_s)
88
+ }
89
+ %>
@@ -4,7 +4,9 @@ ignore_unused:
4
4
  - "decidim.features.proposals.name"
5
5
  - "decidim.features.proposals.settings.*"
6
6
  - "decidim.resource_links.*"
7
- - "activemodel.attributes.proposal.*"
7
+ - "activemodel.attributes.*"
8
8
  - "decidim.proposals.answers.*"
9
9
  - "decidim.features.proposals.actions.*"
10
10
  - "decidim.proposals.proposals.orders.*"
11
+ ignore_missing:
12
+ - decidim.participatory_processes.scopes.global
@@ -7,19 +7,21 @@ ca:
7
7
  scope_id: Àmbit
8
8
  title: Títol
9
9
  user_group_id: Crear proposta
10
+ proposal_answer:
11
+ answer: Resposta
10
12
  decidim:
11
13
  features:
12
14
  proposals:
13
15
  actions:
14
16
  create: Crear propostes
15
- vote: Votar
17
+ vote: Donar suport
16
18
  name: Propostes
17
19
  settings:
18
20
  global:
19
21
  comments_enabled: Comentaris habilitats
22
+ geocoding_enabled: Geocodificació habilitada
20
23
  official_proposals_enabled: Propostes oficials habilitades
21
24
  proposal_answering_enabled: Resposta oficial a propostes activades
22
- scoped_proposals_enabled: Propostes amb àmbits
23
25
  vote_limit: Límit de vot
24
26
  step:
25
27
  comments_blocked: Comentaris bloquejats
@@ -51,7 +53,6 @@ ca:
51
53
  success: Proposta creada correctament
52
54
  form:
53
55
  select_a_category: Selecciona una categoria
54
- select_a_scope: Seleccioneu un àmbit
55
56
  index:
56
57
  title: Propostes
57
58
  new:
@@ -94,10 +95,11 @@ ca:
94
95
  filters_small_view:
95
96
  close_modal: Tancar finestra
96
97
  filter: Filtra
97
- filter_for: Filtrar per
98
+ filter_by: Filtrar per
98
99
  unfold: Desplegar
99
100
  index:
100
101
  new_proposal: Nova proposta
102
+ view_proposal: Veure proposta
101
103
  linked_proposals:
102
104
  proposal_votes:
103
105
  one: <span class="card--list__data__number">1</span>suport
@@ -105,7 +107,6 @@ ca:
105
107
  new:
106
108
  back: Enrere
107
109
  select_a_category: Si us plau, seleccioni una categoria
108
- select_a_scope: Si us plau, seleccioni un àmbit
109
110
  send: Enviar
110
111
  title: Nova proposta
111
112
  orders:
@@ -118,10 +119,11 @@ ca:
118
119
  show:
119
120
  proposal_accepted_reason: 'Aquesta proposta ha estat acceptada perquè:'
120
121
  proposal_rejected_reason: 'Aquesta proposta ha estat rebutjada perquè:'
122
+ report: Informe
121
123
  vote_button:
122
124
  already_voted: Ja has votat
123
125
  no_votes_remaining: No hi ha suports restants
124
- vote: Votar
126
+ vote: Donar suport
125
127
  votes_blocked: Recollida de suports desactivada
126
128
  votes_count:
127
129
  count:
@@ -135,6 +137,7 @@ ca:
135
137
  votes: Suports
136
138
  resource_links:
137
139
  included_proposals:
138
- results: 'La proposta apareix en aquests resultats:'
140
+ proposal_projects: 'Proposta formulada en aquests projectes:'
141
+ proposal_results: 'La proposta apareix en aquests resultats:'
139
142
  proposals_from_meeting:
140
- meetings: Trobades relacionades
143
+ proposal_meetings: Trobades relacionades