Module: Decidim::Proposals::ProposalVotesHelper

Included in:
ApplicationHelper, ProposalVotesController
Defined in:
decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb

Overview

Simple helpers to handle markup variations for proposal votes partials

Instance Method Summary collapse

Instance Method Details

#can_accumulate_supports_beyond_threshold?Boolean

Public: Checks if can accumulate more than maxium is enabled

Returns true if enabled, false otherwise.

Returns:

  • (Boolean)

64
65
66
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 64

def can_accumulate_supports_beyond_threshold?
  component_settings.can_accumulate_supports_beyond_threshold
end

#current_user_can_vote?Boolean

Public: Checks if the current user is allowed to vote in this step.

Returns true if the current user can vote, false otherwise.

Returns:

  • (Boolean)

85
86
87
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 85

def current_user_can_vote?
  current_user && votes_enabled? && vote_limit_enabled? && !votes_blocked?
end

#remaining_votes_count_for(user) ⇒ Object

Return the remaining votes for a user if the current component has a vote limit

user - A User object

Returns a number with the remaining votes for that user


94
95
96
97
98
99
100
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 94

def remaining_votes_count_for(user)
  return 0 unless vote_limit_enabled?

  proposals = Proposal.where(component: current_component)
  votes_count = ProposalVote.where(author: user, proposal: proposals).size
  component_settings.vote_limit - votes_count
end

#threshold_per_proposalObject

Public: Fetches the maximum amount of votes per proposal.

Returns an Integer with the maximum amount of votes, nil otherwise.


55
56
57
58
59
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 55

def threshold_per_proposal
  return nil unless component_settings.threshold_per_proposal.positive?

  component_settings.threshold_per_proposal
end

#threshold_per_proposal_enabled?Boolean

Public: Checks if threshold per proposal are set.

Returns true if set, false otherwise.

Returns:

  • (Boolean)

48
49
50
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 48

def threshold_per_proposal_enabled?
  threshold_per_proposal.present?
end

#vote_button_classes(from_proposals_list) ⇒ Object

Returns the css classes used for proposal vote button in both proposals list and show pages

from_proposals_list - A boolean to indicate if the template is rendered from the proposals list page

Returns a string with the value of the css classes.


23
24
25
26
27
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 23

def vote_button_classes(from_proposals_list)
  return "card__button" if from_proposals_list

  "expanded"
end

#vote_limitObject

Public: Gets the vote limit for each user, if set.

Returns an Integer if set, nil otherwise.


32
33
34
35
36
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 32

def vote_limit
  return nil if component_settings.vote_limit.zero?

  component_settings.vote_limit
end

#vote_limit_enabled?Boolean

Check if the vote limit is enabled for the current component

Returns true if the vote limit is enabled

Returns:

  • (Boolean)

41
42
43
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 41

def vote_limit_enabled?
  vote_limit.present?
end

#votes_blocked?Boolean

Public: Checks if voting is blocked in this step.

Returns true if blocked, false otherwise.

Returns:

  • (Boolean)

78
79
80
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 78

def votes_blocked?
  current_settings.votes_blocked
end

#votes_count_classes(from_proposals_list) ⇒ Object

Returns the css classes used for proposal votes count in both proposals list and show pages

from_proposals_list - A boolean to indicate if the template is rendered from the proposals list page

Returns a hash with the css classes for the count number and label


12
13
14
15
16
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 12

def votes_count_classes(from_proposals_list)
  return { number: "card__support__number", label: "" } if from_proposals_list

  { number: "extra__suport-number", label: "extra__suport-text" }
end

#votes_enabled?Boolean

Public: Checks if voting is enabled in this step.

Returns true if enabled, false otherwise.

Returns:

  • (Boolean)

71
72
73
# File 'decidim-proposals/app/helpers/decidim/proposals/proposal_votes_helper.rb', line 71

def votes_enabled?
  current_settings.votes_enabled
end