decidim-proposals 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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