decidim-elections 0.26.0 → 0.27.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/app/cells/decidim/elections/election_preview/show.erb +1 -1
- data/app/cells/decidim/elections/election_results/show.erb +1 -1
- data/app/cells/decidim/elections/election_vote_cta_cell.rb +8 -3
- data/app/cells/decidim/votings/content_blocks/highlighted_votings/show.erb +1 -1
- data/app/cells/decidim/votings/content_blocks/highlighted_votings_cell.rb +4 -4
- data/app/cells/decidim/votings/content_blocks/landing_page/description/show.erb +2 -12
- data/app/cells/decidim/votings/content_blocks/landing_page/description_cell.rb +0 -8
- data/app/cells/decidim/votings/content_blocks/landing_page/header/show.erb +2 -2
- data/app/cells/decidim/votings/content_blocks/landing_page/header_cell.rb +1 -1
- data/app/cells/decidim/votings/content_blocks/landing_page/polling_stations/address.erb +1 -1
- data/app/commands/decidim/elections/admin/add_user_as_trustee.rb +22 -12
- data/app/commands/decidim/elections/admin/create_answer.rb +1 -1
- data/app/commands/decidim/elections/admin/create_election.rb +1 -1
- data/app/commands/decidim/elections/admin/create_question.rb +3 -7
- data/app/commands/decidim/elections/admin/destroy_answer.rb +1 -1
- data/app/commands/decidim/elections/admin/destroy_election.rb +1 -1
- data/app/commands/decidim/elections/admin/destroy_question.rb +1 -1
- data/app/commands/decidim/elections/admin/end_vote.rb +1 -1
- data/app/commands/decidim/elections/admin/import_proposals_to_elections.rb +1 -1
- data/app/commands/decidim/elections/admin/publish_election.rb +1 -1
- data/app/commands/decidim/elections/admin/publish_results.rb +1 -1
- data/app/commands/decidim/elections/admin/remove_trustee_from_participatory_space.rb +1 -1
- data/app/commands/decidim/elections/admin/report_missing_trustee.rb +1 -1
- data/app/commands/decidim/elections/admin/setup_election.rb +4 -2
- data/app/commands/decidim/elections/admin/start_key_ceremony.rb +1 -1
- data/app/commands/decidim/elections/admin/start_tally.rb +1 -1
- data/app/commands/decidim/elections/admin/start_vote.rb +1 -1
- data/app/commands/decidim/elections/admin/unpublish_election.rb +1 -1
- data/app/commands/decidim/elections/admin/update_action_status.rb +1 -1
- data/app/commands/decidim/elections/admin/update_answer.rb +1 -1
- data/app/commands/decidim/elections/admin/update_answer_selection.rb +1 -1
- data/app/commands/decidim/elections/admin/update_election.rb +1 -1
- data/app/commands/decidim/elections/admin/update_question.rb +1 -2
- data/app/commands/decidim/elections/admin/update_trustee_participatory_space.rb +1 -1
- data/app/commands/decidim/elections/trustee_zone/update_election_bulletin_board_status.rb +1 -1
- data/app/commands/decidim/elections/trustee_zone/update_trustee.rb +1 -1
- data/app/commands/decidim/elections/voter/cast_vote.rb +1 -1
- data/app/commands/decidim/elections/voter/update_vote_status.rb +2 -2
- data/app/commands/decidim/votings/admin/create_ballot_style.rb +1 -1
- data/app/commands/decidim/votings/admin/create_monitoring_committee_member.rb +1 -1
- data/app/commands/decidim/votings/admin/create_polling_officer.rb +1 -1
- data/app/commands/decidim/votings/admin/create_voting.rb +3 -2
- data/app/commands/decidim/votings/admin/destroy_ballot_style.rb +2 -2
- data/app/commands/decidim/votings/admin/destroy_monitoring_committee_member.rb +1 -1
- data/app/commands/decidim/votings/admin/destroy_polling_officer.rb +1 -1
- data/app/commands/decidim/votings/admin/destroy_polling_station.rb +1 -1
- data/app/commands/decidim/votings/admin/manage_polling_station.rb +2 -2
- data/app/commands/decidim/votings/admin/monitoring_committee_validate_polling_station_closure.rb +1 -1
- data/app/commands/decidim/votings/admin/publish_voting.rb +1 -1
- data/app/commands/decidim/votings/admin/unpublish_voting.rb +1 -1
- data/app/commands/decidim/votings/admin/update_ballot_style.rb +1 -1
- data/app/commands/decidim/votings/admin/update_voting.rb +3 -2
- data/app/commands/decidim/votings/census/admin/create_dataset.rb +22 -19
- data/app/commands/decidim/votings/census/admin/create_datum.rb +1 -1
- data/app/commands/decidim/votings/census/admin/destroy_dataset.rb +1 -1
- data/app/commands/decidim/votings/census/admin/increment_dataset_processed_rows.rb +1 -1
- data/app/commands/decidim/votings/census/admin/launch_access_codes_export.rb +1 -1
- data/app/commands/decidim/votings/census/admin/launch_access_codes_generation.rb +1 -1
- data/app/commands/decidim/votings/census/admin/update_dataset.rb +1 -1
- data/app/commands/decidim/votings/certify_polling_station_closure.rb +1 -1
- data/app/commands/decidim/votings/check_census.rb +1 -1
- data/app/commands/decidim/votings/create_polling_station_closure.rb +1 -1
- data/app/commands/decidim/votings/create_polling_station_results.rb +1 -1
- data/app/commands/decidim/votings/send_access_code.rb +1 -1
- data/app/commands/decidim/votings/sign_polling_station_closure.rb +1 -1
- data/app/commands/decidim/votings/voter/in_person_vote.rb +1 -1
- data/app/commands/decidim/votings/voter/update_in_person_vote_status.rb +1 -1
- data/app/controllers/decidim/elections/admin/questions_controller.rb +5 -0
- data/app/controllers/decidim/elections/admin/steps_controller.rb +2 -2
- data/app/controllers/decidim/elections/elections_controller.rb +10 -12
- data/app/controllers/decidim/elections/trustee_zone/elections_controller.rb +1 -1
- data/app/controllers/decidim/votings/census/admin/census_controller.rb +1 -1
- data/app/controllers/decidim/votings/votings_controller.rb +12 -13
- data/app/forms/decidim/elections/admin/question_form.rb +0 -2
- data/app/forms/decidim/elections/admin/setup_form.rb +4 -3
- data/app/forms/decidim/elections/admin/vote_period_form.rb +2 -2
- data/app/forms/decidim/votings/admin/ballot_style_form.rb +1 -1
- data/app/forms/decidim/votings/admin/voting_form.rb +4 -3
- data/app/forms/decidim/votings/census/admin/dataset_form.rb +2 -5
- data/app/forms/decidim/votings/census/admin/datum_form.rb +5 -1
- data/app/helpers/decidim/elections/application_helper.rb +1 -1
- data/app/helpers/decidim/elections/votes_helper.rb +3 -1
- data/app/helpers/decidim/votings/votings_helper.rb +1 -1
- data/app/mailers/decidim/elections/trustee_mailer.rb +28 -0
- data/app/models/decidim/elections/answer.rb +1 -6
- data/app/models/decidim/elections/election.rb +13 -2
- data/app/models/decidim/elections/question.rb +2 -7
- data/app/models/decidim/votings/polling_station.rb +2 -3
- data/app/models/decidim/votings/voting.rb +15 -0
- data/app/packs/entrypoints/{decidim_elections_trustee_tally.js → decidim_elections_trustee_tally_started.js} +0 -0
- data/app/packs/src/decidim/elections/trustee/tally.js +1 -1
- data/app/packs/src/decidim/elections/voter/setup-vote.js +7 -0
- data/app/packs/src/decidim/votings/voting-description-cell.js +1 -8
- data/app/permissions/decidim/votings/admin/permissions.rb +5 -15
- data/app/permissions/decidim/votings/permissions.rb +1 -3
- data/app/presenters/decidim/votings/admin_log/ballot_style_presenter.rb +5 -1
- data/app/presenters/decidim/votings/voting_stats_presenter.rb +4 -1
- data/app/queries/decidim/elections/admin/pending_actions.rb +1 -1
- data/app/queries/decidim/elections/admin/votes_for_statistics.rb +1 -1
- data/app/queries/decidim/elections/elections_finished_to_end.rb +1 -1
- data/app/queries/decidim/elections/elections_ready_to_start.rb +1 -1
- data/app/queries/decidim/elections/filtered_elections.rb +1 -1
- data/app/queries/decidim/elections/trustees/by_participatory_space.rb +1 -1
- data/app/queries/decidim/elections/trustees/by_participatory_space_trustee_ids.rb +1 -1
- data/app/queries/decidim/elections/votes/last_vote_for_voter.rb +1 -1
- data/app/queries/decidim/elections/votes/pending_votes.rb +1 -1
- data/app/queries/decidim/votings/admin/admin_users.rb +1 -1
- data/app/queries/decidim/votings/admin/ballot_style_by_voting_code.rb +1 -1
- data/app/queries/decidim/votings/admin/polling_officers_join_polling_stations.rb +1 -1
- data/app/queries/decidim/votings/admin/polling_officers_join_polling_stations_and_user.rb +2 -2
- data/app/queries/decidim/votings/admin/polling_officers_join_user.rb +1 -1
- data/app/queries/decidim/votings/organization_prioritized_votings.rb +2 -2
- data/app/queries/decidim/votings/organization_promoted_votings.rb +1 -1
- data/app/queries/decidim/votings/organization_published_votings.rb +2 -2
- data/app/queries/decidim/votings/organization_votings.rb +1 -1
- data/app/queries/decidim/votings/prioritized_votings.rb +1 -1
- data/app/queries/decidim/votings/published_votings.rb +1 -1
- data/app/queries/decidim/votings/votes/in_person_vote_for_voter.rb +1 -1
- data/app/queries/decidim/votings/votes/pending_in_person_votes.rb +1 -1
- data/app/services/decidim/votings/census_vote_flow.rb +1 -3
- data/app/views/decidim/elections/admin/questions/_form.html.erb +0 -4
- data/app/views/decidim/elections/admin/steps/{_tally.html.erb → _tally_started.html.erb} +1 -1
- data/app/views/decidim/elections/elections/_filters.html.erb +2 -2
- data/app/views/decidim/elections/elections/election_log.html.erb +3 -1
- data/app/views/decidim/elections/elections/show.html.erb +2 -2
- data/app/views/decidim/elections/trustee_mailer/notification.html.erb +5 -0
- data/app/views/decidim/elections/trustee_zone/elections/{_tally_steps.html.erb → _tally_started_steps.html.erb} +0 -0
- data/app/views/decidim/elections/trustee_zone/elections/show.html.erb +3 -1
- data/app/views/decidim/elections/trustee_zone/trustees/show.html.erb +3 -1
- data/app/views/decidim/elections/votes/_onboarding_modal.html.erb +3 -1
- data/app/views/decidim/elections/votes/_server_error_modal.html.erb +28 -0
- data/app/views/decidim/elections/votes/_show_casting.html.erb +3 -1
- data/app/views/decidim/elections/votes/new.html.erb +19 -11
- data/app/views/decidim/elections/votes/verify.html.erb +4 -1
- data/app/views/decidim/votings/admin/votings/_form.html.erb +15 -6
- data/app/views/decidim/votings/polling_officer_zone/closures/_certify_form.html.erb +3 -1
- data/app/views/decidim/votings/polling_officer_zone/closures/_sign_form.html.erb +3 -1
- data/app/views/decidim/votings/polling_officer_zone/closures/edit.html.erb +3 -1
- data/app/views/decidim/votings/polling_officer_zone/closures/new.html.erb +3 -1
- data/app/views/decidim/votings/polling_officer_zone/in_person_votes/_complete_voting.html.erb +8 -2
- data/app/views/decidim/votings/polling_officer_zone/in_person_votes/new.html.erb +3 -1
- data/app/views/decidim/votings/polling_officer_zone/in_person_votes/show.html.erb +3 -1
- data/app/views/decidim/votings/votings/_check_fields.html.erb +13 -15
- data/app/views/decidim/votings/votings/_filters.html.erb +2 -3
- data/app/views/decidim/votings/votings/check_census.html.erb +5 -1
- data/app/views/layouts/decidim/election_votes.html.erb +3 -1
- data/config/assets.rb +1 -1
- data/config/locales/am-ET.yml +1 -0
- data/config/locales/ar.yml +28 -0
- data/config/locales/bg.yml +1 -0
- data/config/locales/ca.yml +74 -38
- data/config/locales/cs.yml +79 -37
- data/config/locales/da.yml +1 -0
- data/config/locales/de.yml +7 -42
- data/config/locales/el.yml +1 -1
- data/config/locales/en.yml +73 -36
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +77 -41
- data/config/locales/es-PY.yml +77 -41
- data/config/locales/es.yml +79 -43
- data/config/locales/et.yml +1 -0
- data/config/locales/eu.yml +6 -48
- data/config/locales/fi-plain.yml +73 -37
- data/config/locales/fi.yml +75 -39
- data/config/locales/fr-CA.yml +62 -36
- data/config/locales/fr.yml +65 -39
- data/config/locales/ga-IE.yml +1 -15
- data/config/locales/gl.yml +24 -32
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +103 -6
- data/config/locales/id-ID.yml +1 -0
- data/config/locales/is-IS.yml +2 -1
- data/config/locales/it.yml +7 -40
- data/config/locales/ja.yml +66 -40
- data/config/locales/ko.yml +1 -0
- data/config/locales/lb.yml +1 -0
- data/config/locales/lt.yml +1 -0
- data/config/locales/lv.yml +1 -1
- data/config/locales/mt.yml +1 -0
- data/config/locales/nl.yml +11 -48
- data/config/locales/no.yml +15 -40
- data/config/locales/om-ET.yml +1 -0
- data/config/locales/pl.yml +17 -43
- data/config/locales/pt-BR.yml +8 -43
- data/config/locales/pt.yml +13 -48
- data/config/locales/ro-RO.yml +11 -38
- data/config/locales/ru.yml +1 -0
- data/config/locales/si-LK.yml +1 -0
- data/config/locales/sk.yml +1 -0
- data/config/locales/sl.yml +1 -0
- data/config/locales/so-SO.yml +1 -0
- data/config/locales/sr-CS.yml +1 -0
- data/config/locales/sv.yml +61 -18
- data/config/locales/sw-KE.yml +1 -0
- data/config/locales/ti-ER.yml +1 -0
- data/config/locales/tr-TR.yml +4 -9
- data/config/locales/uk.yml +1 -0
- data/config/locales/val-ES.yml +1 -0
- data/config/locales/vi.yml +1 -0
- data/config/locales/zh-CN.yml +1 -1
- data/config/locales/zh-TW.yml +1 -0
- data/db/migrate/20220404112802_rename_bb_status_tally_to_tally_started.rb +19 -0
- data/db/migrate/20220424121541_add_show_check_census_to_votings.rb +7 -0
- data/db/migrate/20220615102642_remove_description_from_elections_questions.rb +7 -0
- data/lib/decidim/api/election_question_type.rb +0 -1
- data/lib/decidim/elections/admin_engine.rb +4 -1
- data/lib/decidim/elections/component.rb +4 -16
- data/lib/decidim/elections/test/factories.rb +4 -5
- data/lib/decidim/elections/version.rb +1 -1
- data/lib/decidim/votings/participatory_space.rb +3 -3
- data/lib/decidim/votings/test/factories.rb +2 -1
- metadata +31 -27
- data/app/services/decidim/elections/election_search.rb +0 -35
- data/app/services/decidim/votings/voting_search.rb +0 -46
@@ -17,11 +17,15 @@ module Decidim
|
|
17
17
|
attribute :email, String
|
18
18
|
attribute :ballot_style_code, String
|
19
19
|
|
20
|
+
validates :birthdate, format: { with: /\A\d{8}\z/ }
|
21
|
+
|
20
22
|
validates :full_name,
|
21
23
|
:full_address,
|
24
|
+
:birthdate,
|
22
25
|
presence: true
|
26
|
+
|
23
27
|
def ballot_style_code
|
24
|
-
|
28
|
+
super&.upcase
|
25
29
|
end
|
26
30
|
end
|
27
31
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Elections
|
5
|
+
# This mailer sends a notification email to a recently added trustee
|
6
|
+
class TrusteeMailer < Decidim::ApplicationMailer
|
7
|
+
include TranslatableAttributes
|
8
|
+
|
9
|
+
# Public: Sends an email to a trustee that just got added to a participatory space.
|
10
|
+
#
|
11
|
+
# user - The user to be notified
|
12
|
+
# participatory_space - The participatory space where the trustee was added.
|
13
|
+
# locale - The locale that will be used for the email content (optional).
|
14
|
+
#
|
15
|
+
# Returns nothing.
|
16
|
+
def notification(user, participatory_space, locale = nil)
|
17
|
+
@user = user
|
18
|
+
@participatory_space = participatory_space
|
19
|
+
@organization = user.organization
|
20
|
+
|
21
|
+
I18n.with_locale(locale || @organization.default_locale) do
|
22
|
+
@participatory_space_title = translated_attribute(participatory_space.title)
|
23
|
+
mail(to: user.email, subject: I18n.t("subject", scope: "decidim.elections.admin.mailers.trustee_mailer", resource_name: @participatory_space_title))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -39,12 +39,7 @@ module Decidim
|
|
39
39
|
# A result percentage relative to the question
|
40
40
|
# Returns a Float.
|
41
41
|
def results_percentage
|
42
|
-
@results_percentage ||=
|
43
|
-
return 0 unless results_total.positive?
|
44
|
-
|
45
|
-
result = results_total.to_f / question.results_total * 100.0
|
46
|
-
result.round
|
47
|
-
end
|
42
|
+
@results_percentage ||= results_total.positive? ? (results_total.to_f / question.results_total * 100.0).round : 0
|
48
43
|
end
|
49
44
|
end
|
50
45
|
end
|
@@ -14,10 +14,11 @@ module Decidim
|
|
14
14
|
include Traceable
|
15
15
|
include Loggable
|
16
16
|
include Decidim::Forms::HasQuestionnaire
|
17
|
+
include Decidim::FilterableResource
|
17
18
|
|
18
19
|
translatable_fields :title, :description
|
19
20
|
|
20
|
-
enum bb_status: [:created, :key_ceremony, :key_ceremony_ended, :vote, :vote_ended, :
|
21
|
+
enum bb_status: [:created, :key_ceremony, :key_ceremony_ended, :vote, :vote_ended, :tally_started, :tally_ended, :results_published].index_with(&:to_s), _prefix: :bb
|
21
22
|
|
22
23
|
component_manifest_name "elections"
|
23
24
|
|
@@ -43,6 +44,8 @@ module Decidim
|
|
43
44
|
.where("end_time < ?", Time.current)
|
44
45
|
}
|
45
46
|
|
47
|
+
scope_search_multi :with_any_date, [:active, :upcoming, :finished]
|
48
|
+
|
46
49
|
def self.log_presenter_class_for(_log)
|
47
50
|
Decidim::Elections::AdminLog::ElectionPresenter
|
48
51
|
end
|
@@ -124,7 +127,7 @@ module Decidim
|
|
124
127
|
end
|
125
128
|
|
126
129
|
def trustee_action_required?
|
127
|
-
bb_key_ceremony? ||
|
130
|
+
bb_key_ceremony? || bb_tally_started?
|
128
131
|
end
|
129
132
|
|
130
133
|
# Public: Checks if the election has a blocked_at value
|
@@ -138,6 +141,14 @@ module Decidim
|
|
138
141
|
def allow_resource_permissions?
|
139
142
|
true
|
140
143
|
end
|
144
|
+
|
145
|
+
# Create i18n ransackers for :title and :description.
|
146
|
+
# Create the :search_text ransacker alias for searching from both of these.
|
147
|
+
ransacker_i18n_multi :search_text, [:title, :description]
|
148
|
+
|
149
|
+
def self.ransackable_scopes(_auth_object = nil)
|
150
|
+
[:with_any_date]
|
151
|
+
end
|
141
152
|
end
|
142
153
|
end
|
143
154
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Elections
|
5
5
|
# The data store for a Question in the Decidim::Elections component. It stores a
|
6
|
-
# title
|
6
|
+
# title and a maximum number of selection that voters can choose.
|
7
7
|
class Question < ApplicationRecord
|
8
8
|
include Decidim::Resourceable
|
9
9
|
include Traceable
|
@@ -41,12 +41,7 @@ module Decidim
|
|
41
41
|
# A result percentage relative to the question
|
42
42
|
# Returns a Float.
|
43
43
|
def blank_votes_percentage
|
44
|
-
@blank_votes_percentage ||=
|
45
|
-
return 0 unless results_total.positive?
|
46
|
-
|
47
|
-
result = blank_votes.to_f / results_total * 100.0
|
48
|
-
result.round
|
49
|
-
end
|
44
|
+
@blank_votes_percentage ||= results_total.positive? ? (blank_votes.to_f / results_total * 100.0).round : 0
|
50
45
|
end
|
51
46
|
|
52
47
|
def slug
|
@@ -7,6 +7,7 @@ module Decidim
|
|
7
7
|
include Traceable
|
8
8
|
include Loggable
|
9
9
|
include Decidim::TranslatableResource
|
10
|
+
include Decidim::FilterableResource
|
10
11
|
|
11
12
|
translatable_fields :title, :location, :location_hints
|
12
13
|
|
@@ -37,9 +38,7 @@ module Decidim
|
|
37
38
|
alias participatory_space voting
|
38
39
|
|
39
40
|
# Allow ransacker to search for a key in a hstore column (`title`.`en`)
|
40
|
-
|
41
|
-
Arel::Nodes::InfixOperation.new("->>", parent.table[:title], Arel::Nodes.build_quoted(I18n.locale.to_s))
|
42
|
-
end
|
41
|
+
ransacker_i18n :title
|
43
42
|
|
44
43
|
[:manager, :president].each do |role|
|
45
44
|
[:name, :email, :nickname].each do |field|
|
@@ -16,6 +16,7 @@ module Decidim
|
|
16
16
|
include Decidim::HasUploadValidations
|
17
17
|
include Decidim::HasAttachments
|
18
18
|
include Decidim::HasAttachmentCollections
|
19
|
+
include Decidim::FilterableResource
|
19
20
|
|
20
21
|
enum voting_type: [:in_person, :online, :hybrid].index_with(&:to_s), _suffix: :voting
|
21
22
|
|
@@ -62,6 +63,8 @@ module Decidim
|
|
62
63
|
scope :order_by_most_recent, -> { order(created_at: :desc) }
|
63
64
|
scope :promoted, -> { published.where(promoted: true) }
|
64
65
|
|
66
|
+
scope_search_multi :with_any_date, [:active, :upcoming, :finished]
|
67
|
+
|
65
68
|
def upcoming?
|
66
69
|
start_time > Time.now.utc
|
67
70
|
end
|
@@ -135,6 +138,10 @@ module Decidim
|
|
135
138
|
ballot_styles.exists?
|
136
139
|
end
|
137
140
|
|
141
|
+
def check_census_enabled?
|
142
|
+
dataset.present? && show_check_census?
|
143
|
+
end
|
144
|
+
|
138
145
|
def elections
|
139
146
|
Decidim::Elections::Election.where(component: components)
|
140
147
|
end
|
@@ -156,6 +163,14 @@ module Decidim
|
|
156
163
|
def vote_flow_for(election)
|
157
164
|
Decidim::Votings::CensusVoteFlow.new(election)
|
158
165
|
end
|
166
|
+
|
167
|
+
# Create i18n ransackers for :title and :description.
|
168
|
+
# Create the :search_text ransacker alias for searching from both of these.
|
169
|
+
ransacker_i18n_multi :search_text, [:title, :description]
|
170
|
+
|
171
|
+
def self.ransackable_scopes(_auth_object = nil)
|
172
|
+
[:with_any_date]
|
173
|
+
end
|
159
174
|
end
|
160
175
|
end
|
161
176
|
end
|
File without changes
|
@@ -112,7 +112,7 @@ $(() => {
|
|
112
112
|
url: $tally.data("updateElectionStatusUrl"),
|
113
113
|
contentType: "application/json",
|
114
114
|
data: JSON.stringify({
|
115
|
-
status: "
|
115
|
+
status: "tally_started"
|
116
116
|
}),
|
117
117
|
headers: {
|
118
118
|
"X-CSRF-Token": $("meta[name=csrf-token]").attr("content")
|
@@ -46,5 +46,12 @@ export default function setupVoteComponent($voteWrapper) {
|
|
46
46
|
});
|
47
47
|
}
|
48
48
|
|
49
|
+
/* Fallback for non-handled failed promises */
|
50
|
+
window.addEventListener("unhandledrejection", (event) => {
|
51
|
+
$("#server-failure .tech-info").html(event.reason);
|
52
|
+
$("#server-failure").foundation("open");
|
53
|
+
});
|
54
|
+
|
49
55
|
window.Decidim = window.Decidim || {};
|
50
56
|
window.Decidim.setupVoteComponent = setupVoteComponent;
|
57
|
+
|
@@ -1,6 +1,4 @@
|
|
1
1
|
$(() => {
|
2
|
-
const isShowMoreButton = ($button) => $button.hasClass("show-more-content");
|
3
|
-
|
4
2
|
const remToPx = (count) => {
|
5
3
|
const unit = $("html").css("font-size");
|
6
4
|
|
@@ -25,17 +23,12 @@ $(() => {
|
|
25
23
|
$content.css("max-height", contentMaxHeight);
|
26
24
|
}
|
27
25
|
|
28
|
-
$button.on("click", (
|
29
|
-
const $buttonTextMore = $button.find(".button-text.show-more-content");
|
26
|
+
$button.on("click", () => {
|
30
27
|
const $buttonTextLess = $button.find(".button-text.show-less-content");
|
31
28
|
|
32
29
|
let newHeight = contentMaxHeight;
|
33
|
-
if (isShowMoreButton($(event.target))) {
|
34
|
-
newHeight = contentHeight;
|
35
|
-
}
|
36
30
|
|
37
31
|
$content.css("max-height", newHeight);
|
38
32
|
$buttonTextLess.toggleClass("hide");
|
39
|
-
$buttonTextMore.toggleClass("hide");
|
40
33
|
});
|
41
34
|
});
|
@@ -8,6 +8,9 @@ module Decidim
|
|
8
8
|
return permission_action unless user
|
9
9
|
return user_allowed_to_read_admin_dashboard? if read_admin_dashboard_action?
|
10
10
|
return permission_action unless permission_action.scope == :admin
|
11
|
+
|
12
|
+
user_can_enter_space_area?
|
13
|
+
|
11
14
|
return permission_action if voting && !voting.is_a?(Decidim::Votings::Voting)
|
12
15
|
|
13
16
|
unless user_can_read_votings_admin_dashboard?
|
@@ -15,7 +18,6 @@ module Decidim
|
|
15
18
|
return permission_action
|
16
19
|
end
|
17
20
|
|
18
|
-
user_can_enter_space_area?
|
19
21
|
allowed_read_participatory_space?
|
20
22
|
allowed_voting_action?
|
21
23
|
|
@@ -76,7 +78,7 @@ module Decidim
|
|
76
78
|
end
|
77
79
|
when :landing_page
|
78
80
|
toggle_allow(user.admin?) if permission_action.action == :update
|
79
|
-
when :components
|
81
|
+
when :ballot_styles, :components, :polling_stations, :polling_officers, :monitoring_committee_members
|
80
82
|
toggle_allow(user.admin?) if permission_action.action == :read
|
81
83
|
when :polling_station
|
82
84
|
case permission_action.action
|
@@ -85,8 +87,6 @@ module Decidim
|
|
85
87
|
when :update, :delete
|
86
88
|
toggle_allow(user.admin? && polling_station.present?)
|
87
89
|
end
|
88
|
-
when :polling_stations
|
89
|
-
toggle_allow(user.admin?) if permission_action.action == :read
|
90
90
|
when :polling_officer
|
91
91
|
case permission_action.action
|
92
92
|
when :create
|
@@ -94,8 +94,6 @@ module Decidim
|
|
94
94
|
when :delete
|
95
95
|
toggle_allow(user.admin? && polling_officer.present?)
|
96
96
|
end
|
97
|
-
when :polling_officers
|
98
|
-
toggle_allow(user.admin?) if permission_action.action == :read
|
99
97
|
when :monitoring_committee_member
|
100
98
|
case permission_action.action
|
101
99
|
when :create
|
@@ -105,18 +103,12 @@ module Decidim
|
|
105
103
|
end
|
106
104
|
when :monitoring_committee_menu
|
107
105
|
toggle_allow(user_can_read_voting?) if permission_action.action == :read
|
108
|
-
when :monitoring_committee_members
|
109
|
-
toggle_allow(user.admin?) if permission_action.action == :read
|
110
106
|
when :monitoring_committee_polling_station_closure
|
111
107
|
toggle_allow(user_monitoring_committee_for_voting? && closure.present?) if [:read, :validate].member?(permission_action.action)
|
112
|
-
when :monitoring_committee_polling_station_closures
|
113
|
-
toggle_allow(user_monitoring_committee_for_voting?) if permission_action.action == :read
|
114
|
-
when :monitoring_committee_verify_elections
|
108
|
+
when :monitoring_committee_polling_station_closures, :monitoring_committee_verify_elections, :monitoring_committee_election_results
|
115
109
|
toggle_allow(user_monitoring_committee_for_voting?) if permission_action.action == :read
|
116
110
|
when :monitoring_committee_election_result
|
117
111
|
toggle_allow(user_monitoring_committee_for_voting? && election.present?) if [:read, :validate].member?(permission_action.action)
|
118
|
-
when :monitoring_committee_election_results
|
119
|
-
toggle_allow(user_monitoring_committee_for_voting?) if permission_action.action == :read
|
120
112
|
when :census
|
121
113
|
toggle_allow(user.admin?) if permission_action.action == :manage
|
122
114
|
when :ballot_style
|
@@ -126,8 +118,6 @@ module Decidim
|
|
126
118
|
when :update, :delete
|
127
119
|
toggle_allow(user.admin? && (voting.dataset.blank? || voting.dataset.init_data?) && ballot_style.present?)
|
128
120
|
end
|
129
|
-
when :ballot_styles
|
130
|
-
toggle_allow(user.admin?) if permission_action.action == :read
|
131
121
|
end
|
132
122
|
end
|
133
123
|
|
@@ -27,12 +27,10 @@ module Decidim
|
|
27
27
|
return unless permission_action.scope == :public
|
28
28
|
|
29
29
|
case permission_action.subject
|
30
|
-
when :votings
|
30
|
+
when :votings, :participatory_space
|
31
31
|
allow!
|
32
32
|
when :voting
|
33
33
|
toggle_allow(voting.published? || user&.admin?)
|
34
|
-
when :participatory_space
|
35
|
-
allow!
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
@@ -17,10 +17,14 @@ module Decidim
|
|
17
17
|
|
18
18
|
def i18n_params
|
19
19
|
super.merge(
|
20
|
-
ballot_style_code:
|
20
|
+
ballot_style_code: ballot_style_code.to_s
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
+
def ballot_style_code
|
25
|
+
action_log&.resource&.code || action_log.extra["code"]
|
26
|
+
end
|
27
|
+
|
24
28
|
def action_string
|
25
29
|
case action
|
26
30
|
when "create", "delete", "update"
|
@@ -4,9 +4,12 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
# A presenter to render statistics in the homepage.
|
6
6
|
class VotingStatsPresenter < Decidim::StatsPresenter
|
7
|
-
attribute :voting, Decidim::Votings::Voting
|
8
7
|
include Decidim::IconHelper
|
9
8
|
|
9
|
+
def voting
|
10
|
+
__getobj__.fetch(:voting)
|
11
|
+
end
|
12
|
+
|
10
13
|
# Public: returns a collection of stats (Hash) for the Voting Landing.
|
11
14
|
def collection
|
12
15
|
highlighted_stats = voting_participants_stats
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Admin
|
6
6
|
# A class used to find actions with a pending status
|
7
|
-
class PendingActions <
|
7
|
+
class PendingActions < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
def self.for
|
10
10
|
new.query
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Admin
|
6
6
|
# A class used to find election votes for statistics
|
7
|
-
class VotesForStatistics <
|
7
|
+
class VotesForStatistics < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried object.
|
9
9
|
def self.for(election)
|
10
10
|
new(election).query
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Elections
|
5
5
|
# A class used to find elections finished to close their voting period
|
6
|
-
class ElectionsFinishedToEnd <
|
6
|
+
class ElectionsFinishedToEnd < Decidim::Query
|
7
7
|
# Syntactic sugar to initialize the class and return the queried objects.
|
8
8
|
def self.for
|
9
9
|
new.query
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Elections
|
5
5
|
# A class used to find elections ready and near to start the voting period
|
6
|
-
class ElectionsReadyToStart <
|
6
|
+
class ElectionsReadyToStart < Decidim::Query
|
7
7
|
# Syntactic sugar to initialize the class and return the queried objects.
|
8
8
|
def self.for
|
9
9
|
new.query
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Elections
|
5
5
|
# A class used to find elections filtered by its state
|
6
|
-
class FilteredElections <
|
6
|
+
class FilteredElections < Decidim::Query
|
7
7
|
# Syntactic sugar to initialize the class and return the queried objects.
|
8
8
|
#
|
9
9
|
# components - An array of Decidim::Component
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Trustees
|
6
6
|
# A class used to find trustees by participatory space.
|
7
|
-
class ByParticipatorySpace <
|
7
|
+
class ByParticipatorySpace < Decidim::Query
|
8
8
|
# Initializes the class.
|
9
9
|
#
|
10
10
|
def initialize(participatory_space)
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Trustees
|
6
6
|
# A class used to find trustees by participatory space trustee ids.
|
7
|
-
class ByParticipatorySpaceTrusteeIds <
|
7
|
+
class ByParticipatorySpaceTrusteeIds < Decidim::Query
|
8
8
|
# Initializes the class.
|
9
9
|
#
|
10
10
|
def initialize(trustee_ids)
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Votes
|
6
6
|
# A class used to find the last vote casted by a voter in an election
|
7
|
-
class LastVoteForVoter <
|
7
|
+
class LastVoteForVoter < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# election - the election where the vote was casted
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Elections
|
5
5
|
module Votes
|
6
6
|
# A class used to find votes with a pending status
|
7
|
-
class PendingVotes <
|
7
|
+
class PendingVotes < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
def self.for
|
10
10
|
new.query
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Admin
|
6
6
|
# A class used to find the admins for a voting or an organization votings.
|
7
|
-
class AdminUsers <
|
7
|
+
class AdminUsers < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# voting - a voting that needs to find its voting admins
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Admin
|
6
6
|
# A class used to find trustees by participatory space.
|
7
|
-
class BallotStyleByVotingCode <
|
7
|
+
class BallotStyleByVotingCode < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# voting - the voting of the Ballot Style
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Admin
|
6
6
|
# A class join the polling officers with their respective polling stations.
|
7
|
-
class PollingOfficersJoinPollingStations <
|
7
|
+
class PollingOfficersJoinPollingStations < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# polling_officers - the collection of polling officers
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Admin
|
6
6
|
# A class join the polling officers with their respective polling stations and users.
|
7
|
-
class PollingOfficersJoinPollingStationsAndUser <
|
7
|
+
class PollingOfficersJoinPollingStationsAndUser < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# polling_officers - the collection of polling officers
|
@@ -23,7 +23,7 @@ module Decidim
|
|
23
23
|
#
|
24
24
|
# Returns an ActiveRecord::Relation.
|
25
25
|
def query
|
26
|
-
|
26
|
+
Decidim::Query.merge(
|
27
27
|
PollingOfficersJoinPollingStations.new(@polling_officers),
|
28
28
|
PollingOfficersJoinUser.new(@polling_officers)
|
29
29
|
).query
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Admin
|
6
6
|
# A class join the polling officers with their respective decidim user.
|
7
|
-
class PollingOfficersJoinUser <
|
7
|
+
class PollingOfficersJoinUser < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# polling_officers - the collection of polling officers
|
@@ -4,14 +4,14 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
# This query class filters public votings given an organization in a
|
6
6
|
# meaningful prioritized order.
|
7
|
-
class OrganizationPrioritizedVotings <
|
7
|
+
class OrganizationPrioritizedVotings < Decidim::Query
|
8
8
|
def initialize(organization, user = nil)
|
9
9
|
@organization = organization
|
10
10
|
@user = user
|
11
11
|
end
|
12
12
|
|
13
13
|
def query
|
14
|
-
|
14
|
+
Decidim::Query.merge(
|
15
15
|
OrganizationPublishedVotings.new(@organization),
|
16
16
|
PrioritizedVotings.new
|
17
17
|
).query
|
@@ -3,13 +3,13 @@
|
|
3
3
|
module Decidim
|
4
4
|
module Votings
|
5
5
|
# This query class filters published votings given an organization.
|
6
|
-
class OrganizationPublishedVotings <
|
6
|
+
class OrganizationPublishedVotings < Decidim::Query
|
7
7
|
def initialize(organization)
|
8
8
|
@organization = organization
|
9
9
|
end
|
10
10
|
|
11
11
|
def query
|
12
|
-
|
12
|
+
Decidim::Query.merge(
|
13
13
|
OrganizationVotings.new(@organization),
|
14
14
|
PublishedVotings.new
|
15
15
|
).query
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
# This query orders votings by importance, prioritizing promoted
|
6
6
|
# votings.
|
7
|
-
class PrioritizedVotings <
|
7
|
+
class PrioritizedVotings < Decidim::Query
|
8
8
|
def query
|
9
9
|
Decidim::Votings::Voting.order(promoted: :desc)
|
10
10
|
end
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Votes
|
6
6
|
# A class used to find a non-rejected in person vote registered for a voter in an election
|
7
|
-
class InPersonVoteForVoter <
|
7
|
+
class InPersonVoteForVoter < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
#
|
10
10
|
# election - the election where the vote was casted
|
@@ -4,7 +4,7 @@ module Decidim
|
|
4
4
|
module Votings
|
5
5
|
module Votes
|
6
6
|
# A class used to find in person votes with a pending status
|
7
|
-
class PendingInPersonVotes <
|
7
|
+
class PendingInPersonVotes < Decidim::Query
|
8
8
|
# Syntactic sugar to initialize the class and return the queried objects.
|
9
9
|
def self.for
|
10
10
|
new.query
|