decidim-proposals 0.4.0 → 0.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e402f0c7815c844f71feab64eb6c0ba24eb0212
4
- data.tar.gz: 6272d3cf287ba6e1bd302cf89165ead266c41fe5
3
+ metadata.gz: 119d43dd9b091b7b6f894a98cf5b1a5b0f8e5b38
4
+ data.tar.gz: 60787db2fd895e03b62fed6f3f69c69db1feb23c
5
5
  SHA512:
6
- metadata.gz: 17d7d9569a92625edd185177e230107c81c41d6209fd6448180aa662bb939fa4169cc05838638b089ed3c9b73ee017fd5029e05ec098c4e5329944f461a94387
7
- data.tar.gz: 8f91779210c7b26b0b133e0b9e941a9966088adfcd4c7ff99f389b1542073a57bc9380cd7244334a925a75ddf556f517576bb5fd047a1d89b0e68e1616fee80f
6
+ metadata.gz: 94c3bcb27db06bfe1010caa03994bab8601107a5b1b05fe18cb2d1bf04b3e3e6e5a72a7ab9615c12d45c1b29237e0fa1c14933035c8b8d4cf1bcd4c32e3727be
7
+ data.tar.gz: fd598e7e6ae7842ffb504f6d2fa600e447ef22681347a6489b31ee7fdc44a628e3355d5d36ce40061d19f61bb537a8139e95e6304e3eadcb0f3d71baf31a651c
@@ -8,6 +8,7 @@ module Decidim
8
8
  include FormFactory
9
9
  include FilterResource
10
10
  include Orderable
11
+ include Paginable
11
12
 
12
13
  helper_method :geocoded_proposals
13
14
 
@@ -30,7 +31,7 @@ module Decidim
30
31
  []
31
32
  end
32
33
 
33
- @proposals = @proposals.page(params[:page]).per(12)
34
+ @proposals = paginate(@proposals)
34
35
  @proposals = reorder(@proposals)
35
36
  end
36
37
 
@@ -11,7 +11,7 @@ module Decidim
11
11
  translatable_attribute :answer, String
12
12
  attribute :state, String
13
13
 
14
- validates :state, presence: true, inclusion: { in: %w(accepted rejected) }
14
+ validates :state, presence: true, inclusion: { in: %w(accepted rejected evaluating) }
15
15
  validates :answer, translatable_presence: true, if: ->(form) { form.state == "rejected" }
16
16
  end
17
17
  end
@@ -17,15 +17,7 @@ module Decidim
17
17
  #
18
18
  # Returns a String.
19
19
  def humanize_proposal_state(state)
20
- value = if state == "accepted"
21
- "accepted"
22
- elsif state == "rejected"
23
- "rejected"
24
- else
25
- "not_answered"
26
- end
27
-
28
- I18n.t(value, scope: "decidim.proposals.answers")
20
+ I18n.t(state, scope: "decidim.proposals.answers", default: :not_answered)
29
21
  end
30
22
 
31
23
  # Public: The css class applied based on the proposal state.
@@ -34,14 +26,34 @@ module Decidim
34
26
  #
35
27
  # Returns a String.
36
28
  def proposal_state_css_class(state)
37
- if state == "accepted"
29
+ case state
30
+ when "accepted"
38
31
  "text-success"
39
- elsif state == "rejected"
32
+ when "rejected"
40
33
  "text-alert"
34
+ when "evaluating"
35
+ "text-info"
41
36
  else
42
37
  "text-warning"
43
38
  end
44
39
  end
40
+
41
+ # Public: The css class applied based on the proposal state to
42
+ # the proposal badge.
43
+ #
44
+ # state - The String state of the proposal.
45
+ #
46
+ # Returns a String.
47
+ def proposal_state_badge_css_class(state)
48
+ case state
49
+ when "accepted"
50
+ "success"
51
+ when "rejected"
52
+ "warning"
53
+ when "evaluating"
54
+ "secondary"
55
+ end
56
+ end
45
57
  end
46
58
  end
47
59
  end
@@ -5,16 +5,9 @@ module Decidim
5
5
  module Abilities
6
6
  # Defines the abilities related to proposals for a logged in admin user.
7
7
  # Intended to be used with `cancancan`.
8
- class AdminUser
9
- include CanCan::Ability
10
-
11
- attr_reader :user, :context
12
-
13
- def initialize(user, context)
14
- return unless user && user.role?(:admin)
15
-
16
- @user = user
17
- @context = context
8
+ class AdminAbility < Decidim::Abilities::AdminAbility
9
+ def define_abilities
10
+ super
18
11
 
19
12
  can :manage, Proposal
20
13
  can :unreport, Proposal
@@ -26,11 +19,11 @@ module Decidim
26
19
  private
27
20
 
28
21
  def current_settings
29
- context.fetch(:current_settings, nil)
22
+ @context.fetch(:current_settings, nil)
30
23
  end
31
24
 
32
25
  def feature_settings
33
- context.fetch(:feature_settings, nil)
26
+ @context.fetch(:feature_settings, nil)
34
27
  end
35
28
 
36
29
  def can_create_proposal?
@@ -5,7 +5,7 @@ module Decidim
5
5
  module Abilities
6
6
  # Defines the abilities related to proposals for a logged in user.
7
7
  # Intended to be used with `cancancan`.
8
- class CurrentUser
8
+ class CurrentUserAbility
9
9
  include CanCan::Ability
10
10
 
11
11
  attr_reader :user, :context
@@ -27,7 +27,6 @@ module Decidim
27
27
  can :create, Proposal if authorized?(:create) && creation_enabled?
28
28
 
29
29
  can :report, Proposal
30
- can :report, Decidim::Comments::Comment
31
30
  end
32
31
 
33
32
  private
@@ -5,22 +5,14 @@ module Decidim
5
5
  module Abilities
6
6
  # Defines the abilities related to proposals for a logged in process admin user.
7
7
  # Intended to be used with `cancancan`.
8
- class ProcessAdminUser
9
- include CanCan::Ability
8
+ class ParticipatoryProcessAdminAbility < Decidim::Abilities::ParticipatoryProcessAdminAbility
9
+ def define_participatory_process_abilities
10
+ super
10
11
 
11
- attr_reader :user, :context
12
-
13
- def initialize(user, context)
14
- return unless user && !user.role?(:admin)
15
-
16
- @user = user
17
- @context = context
18
-
19
- can :manage, Proposal do |proposal|
20
- participatory_processes.include?(proposal.feature.participatory_process)
12
+ can [:manage, :unreport, :hide], Proposal do |proposal|
13
+ can_manage_process?(proposal.feature.participatory_process)
21
14
  end
22
- can :unreport, Proposal
23
- can :hide, Proposal
15
+
24
16
  cannot :create, Proposal unless can_create_proposal?
25
17
  cannot :update, Proposal unless can_update_proposal?
26
18
  end
@@ -28,31 +20,27 @@ module Decidim
28
20
  private
29
21
 
30
22
  def current_settings
31
- context.fetch(:current_settings, nil)
23
+ @context.fetch(:current_settings, nil)
32
24
  end
33
25
 
34
26
  def feature_settings
35
- context.fetch(:feature_settings, nil)
27
+ @context.fetch(:feature_settings, nil)
36
28
  end
37
29
 
38
30
  def current_feature
39
- context.fetch(:current_feature, nil)
31
+ @context.fetch(:current_feature, nil)
40
32
  end
41
33
 
42
34
  def can_create_proposal?
43
35
  current_settings.try(:creation_enabled?) &&
44
36
  feature_settings.try(:official_proposals_enabled) &&
45
- participatory_processes.include?(current_feature.try(:participatory_process))
37
+ can_manage_process?(current_feature.try(:participatory_process))
46
38
  end
47
39
 
48
40
  def can_update_proposal?
49
41
  current_settings.try(:proposal_answering_enabled) &&
50
42
  feature_settings.try(:proposal_answering_enabled)
51
43
  end
52
-
53
- def participatory_processes
54
- @participatory_processes ||= Decidim::Admin::ManageableParticipatoryProcessesForUser.for(@user)
55
- end
56
44
  end
57
45
  end
58
46
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Decidim
4
+ module Proposals
5
+ module Abilities
6
+ # Defines the abilities related to proposals for a logged in process admin user.
7
+ # Intended to be used with `cancancan`.
8
+ class ParticipatoryProcessModeratorAbility < Decidim::Abilities::ParticipatoryProcessModeratorAbility
9
+ def define_participatory_process_abilities
10
+ super
11
+
12
+ can [:unreport, :hide], Proposal do |proposal|
13
+ can_manage_process?(proposal.feature.participatory_process)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -23,6 +23,7 @@ module Decidim
23
23
 
24
24
  scope :accepted, -> { where(state: "accepted") }
25
25
  scope :rejected, -> { where(state: "rejected") }
26
+ scope :evaluating, -> { where(state: "evaluating") }
26
27
 
27
28
  def self.order_randomly(seed)
28
29
  transaction do
@@ -67,6 +68,13 @@ module Decidim
67
68
  state == "rejected"
68
69
  end
69
70
 
71
+ # Public: Checks if the organization has marked the proposal as evaluating it.
72
+ #
73
+ # Returns Boolean.
74
+ def evaluating?
75
+ state == "evaluating"
76
+ end
77
+
70
78
  # Public: Overrides the `commentable?` Commentable concern method.
71
79
  def commentable?
72
80
  feature.settings.comments_enabled?
@@ -47,10 +47,13 @@ module Decidim
47
47
 
48
48
  # Handle the state filter
49
49
  def search_state
50
- if state == "accepted"
50
+ case state
51
+ when "accepted"
51
52
  query.accepted
52
- elsif state == "rejected"
53
+ when "rejected"
53
54
  query.rejected
55
+ when "evaluating"
56
+ query.evaluating
54
57
  else # Assume 'all'
55
58
  query
56
59
  end
@@ -6,7 +6,7 @@
6
6
 
7
7
  <div class="card-section">
8
8
  <div class="row column">
9
- <%= f.collection_radio_buttons :state, [["accepted", t('.accepted')], ["rejected", t('.rejected')]], :first, :last, prompt: true %>
9
+ <%= f.collection_radio_buttons :state, [["accepted", t('.accepted')], ["rejected", t('.rejected')], ["evaluating", t('.evaluating')]], :first, :last, prompt: true %>
10
10
  </div>
11
11
 
12
12
  <div class="row column">
@@ -17,7 +17,7 @@
17
17
  <% end %>
18
18
 
19
19
  <% if feature_settings.proposal_answering_enabled && current_settings.proposal_answering_enabled %>
20
- <%= form.collection_radio_buttons :state, [["all", t('.all')], ["accepted", t('.accepted')], ["rejected", t('.rejected')]], :first, :last, legend_title: t('.state') %>
20
+ <%= form.collection_radio_buttons :state, [["all", t('.all')], ["accepted", t('.accepted')], ["rejected", t('.rejected')], ["evaluating", t('.evaluating')]], :first, :last, legend_title: t('.state') %>
21
21
  <% end %>
22
22
 
23
23
  <% if linked_classes_for(Decidim::Proposals::Proposal).any? %>
@@ -1,3 +1,3 @@
1
1
  <% if proposal.answered? %>
2
- <span class="<%= (proposal.accepted? ? 'success' : 'warning') %> label proposal-status"><%= humanize_proposal_state proposal.state %></span>
2
+ <span class="<%= proposal_state_badge_css_class(proposal.state) %> label proposal-status"><%= humanize_proposal_state proposal.state %></span>
3
3
  <% end %>
@@ -1,4 +1,13 @@
1
- <%= order_selector available_orders, i18n_scope: "decidim.proposals.proposals.orders" %>
1
+ <div class="collection-sort-controls row small-up-1 medium-up-3 card-grid">
2
+ <div class="column">
3
+ <%= order_selector available_orders, i18n_scope: "decidim.proposals.proposals.orders" %>
4
+ </div>
5
+
6
+ <div class="column">
7
+ <%= render partial: "decidim/shared/results_per_page" %>
8
+ </div>
9
+ </div>
10
+
2
11
  <div class="row small-up-1 medium-up-2 card-grid">
3
12
  <%= render @proposals %>
4
13
  </div>
@@ -48,6 +48,7 @@ ca:
48
48
  edit:
49
49
  accepted: Acceptada
50
50
  answer_proposal: Resposta
51
+ evaluating: En avaluació
51
52
  rejected: Rebutjada
52
53
  title: Respondre a la proposta %{title}
53
54
  proposals:
@@ -66,6 +67,7 @@ ca:
66
67
  title: Crear proposta
67
68
  answers:
68
69
  accepted: Acceptada
70
+ evaluating: En avaluació
69
71
  not_answered: No resposta
70
72
  rejected: Rebutjada
71
73
  create:
@@ -97,6 +99,7 @@ ca:
97
99
  category: Categoria
98
100
  category_prompt: Selecciona una categoria
99
101
  citizenship: Ciutadania
102
+ evaluating: En avaluació
100
103
  official: Oficial
101
104
  origin: Origen
102
105
  rejected: Rebutjades
@@ -50,6 +50,7 @@ en:
50
50
  edit:
51
51
  accepted: Accepted
52
52
  answer_proposal: Answer
53
+ evaluating: Evaluating
53
54
  rejected: Rejected
54
55
  title: Answer for proposal %{title}
55
56
  proposals:
@@ -68,6 +69,7 @@ en:
68
69
  title: Create proposal
69
70
  answers:
70
71
  accepted: Accepted
72
+ evaluating: Evaluating
71
73
  not_answered: Not answered
72
74
  rejected: Rejected
73
75
  create:
@@ -99,6 +101,7 @@ en:
99
101
  category: Category
100
102
  category_prompt: Select a category
101
103
  citizenship: Citizenship
104
+ evaluating: Evaluating
102
105
  official: Official
103
106
  origin: Origin
104
107
  rejected: Rejected
@@ -48,6 +48,7 @@ es:
48
48
  edit:
49
49
  accepted: Aceptada
50
50
  answer_proposal: Respuesta
51
+ evaluating: En evaluación
51
52
  rejected: Rechazada
52
53
  title: Responder a la propuesta %{title}
53
54
  proposals:
@@ -66,6 +67,7 @@ es:
66
67
  title: Crear propuesta
67
68
  answers:
68
69
  accepted: Aceptadas
70
+ evaluating: En evaluación
69
71
  not_answered: No contestada
70
72
  rejected: Rechazada
71
73
  create:
@@ -97,6 +99,7 @@ es:
97
99
  category: Categoría
98
100
  category_prompt: Selecciona una categoría
99
101
  citizenship: Ciudadanía
102
+ evaluating: En evaluación
100
103
  official: Oficial
101
104
  origin: Origen
102
105
  rejected: Rechazadas
@@ -18,8 +18,11 @@ module Decidim
18
18
 
19
19
  initializer "decidim_proposals.inject_abilities_to_user" do |_app|
20
20
  Decidim.configure do |config|
21
- config.admin_abilities += ["Decidim::Proposals::Abilities::AdminUser"]
22
- config.admin_abilities += ["Decidim::Proposals::Abilities::ProcessAdminUser"]
21
+ config.admin_abilities += [
22
+ "Decidim::Proposals::Abilities::AdminAbility",
23
+ "Decidim::Proposals::Abilities::ParticipatoryProcessAdminAbility",
24
+ "Decidim::Proposals::Abilities::ParticipatoryProcessModeratorAbility"
25
+ ]
23
26
  end
24
27
  end
25
28
 
@@ -25,7 +25,7 @@ module Decidim
25
25
 
26
26
  initializer "decidim_proposals.inject_abilities_to_user" do |_app|
27
27
  Decidim.configure do |config|
28
- config.abilities += ["Decidim::Proposals::Abilities::CurrentUser"]
28
+ config.abilities += ["Decidim::Proposals::Abilities::CurrentUserAbility"]
29
29
  end
30
30
  end
31
31
  end
@@ -114,6 +114,10 @@ Decidim.register_feature(:proposals) do |feature|
114
114
  proposal.answered_at = Time.current
115
115
  proposal.answer = Decidim::Faker::Localized.sentence(10)
116
116
  proposal.save!
117
+ elsif n > 6
118
+ proposal.state = "evaluating"
119
+ proposal.answered_at = Time.current
120
+ proposal.save!
117
121
  end
118
122
 
119
123
  rand(3).times do |m|
@@ -21,6 +21,10 @@ module Decidim
21
21
  id: @proposal.category.try(:id),
22
22
  name: @proposal.category.try(:name)
23
23
  },
24
+ scope: {
25
+ id: @proposal.scope.try(:id),
26
+ name: @proposal.scope.try(:name)
27
+ },
24
28
  title: @proposal.title,
25
29
  body: @proposal.body,
26
30
  votes: @proposal.proposal_votes_count,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-proposals
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-07-12 00:00:00.000000000 Z
13
+ date: 2017-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: decidim-core
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.4.0
21
+ version: 0.4.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 0.4.0
28
+ version: 0.4.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: decidim-comments
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.4.0
35
+ version: 0.4.1
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.4.0
42
+ version: 0.4.1
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rectify
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -88,56 +88,56 @@ dependencies:
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 0.4.0
91
+ version: 0.4.1
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - '='
97
97
  - !ruby/object:Gem::Version
98
- version: 0.4.0
98
+ version: 0.4.1
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: decidim-meetings
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - '='
104
104
  - !ruby/object:Gem::Version
105
- version: 0.4.0
105
+ version: 0.4.1
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - '='
111
111
  - !ruby/object:Gem::Version
112
- version: 0.4.0
112
+ version: 0.4.1
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: decidim-results
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - '='
118
118
  - !ruby/object:Gem::Version
119
- version: 0.4.0
119
+ version: 0.4.1
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - '='
125
125
  - !ruby/object:Gem::Version
126
- version: 0.4.0
126
+ version: 0.4.1
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: decidim-budgets
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
131
  - - '='
132
132
  - !ruby/object:Gem::Version
133
- version: 0.4.0
133
+ version: 0.4.1
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
138
  - - '='
139
139
  - !ruby/object:Gem::Version
140
- version: 0.4.0
140
+ version: 0.4.1
141
141
  description: A proposals component for decidim's participatory processes.
142
142
  email:
143
143
  - josepjaume@gmail.com
@@ -175,9 +175,10 @@ files:
175
175
  - app/helpers/decidim/proposals/application_helper.rb
176
176
  - app/helpers/decidim/proposals/map_helper.rb
177
177
  - app/helpers/decidim/proposals/proposal_votes_helper.rb
178
- - app/models/decidim/proposals/abilities/admin_user.rb
179
- - app/models/decidim/proposals/abilities/current_user.rb
180
- - app/models/decidim/proposals/abilities/process_admin_user.rb
178
+ - app/models/decidim/proposals/abilities/admin_ability.rb
179
+ - app/models/decidim/proposals/abilities/current_user_ability.rb
180
+ - app/models/decidim/proposals/abilities/participatory_process_admin_ability.rb
181
+ - app/models/decidim/proposals/abilities/participatory_process_moderator_ability.rb
181
182
  - app/models/decidim/proposals/application_record.rb
182
183
  - app/models/decidim/proposals/proposal.rb
183
184
  - app/models/decidim/proposals/proposal_vote.rb