X-Git-Url: https://projects.mako.cc/source/selectricity-live/blobdiff_plain/9abed97635edbac7fb1a687298fff5c5434cdff4..dc7d60a0de460c72d292b43616eb97a8b34741c8:/app/controllers/elections_controller.rb diff --git a/app/controllers/elections_controller.rb b/app/controllers/elections_controller.rb index b3406a8..4cb72bc 100644 --- a/app/controllers/elections_controller.rb +++ b/app/controllers/elections_controller.rb @@ -1,10 +1,8 @@ -require 'uniq_token' - class ElectionsController < ApplicationController model :raw_voter_list, :voter, :vote, :candidate - - # general methods for dealing with elections + ## general methods for dealing with elections + #################################################################### def index list render :action => 'list' @@ -14,8 +12,10 @@ class ElectionsController < ApplicationController @election_pages, @elections = paginate :elections, :per_page => 10 end - # methods for displaying, creating, and manipulating election overview - # data + ## methods for displaying, creating, + ## and manipulating election overview data + #################################################################### + def show @election = Election.find(params[:id]) end @@ -55,6 +55,7 @@ class ElectionsController < ApplicationController # methods fod display, adding, deleting, and manipulating candidate # information for elections + #################################################################### def new_candidates @election = Election.find( params[:id] ) end @@ -77,8 +78,9 @@ class ElectionsController < ApplicationController @election = Election.find( params[:id] ) end - # methods for displaying, adding, deleting, and manipulating voters - # for a particular election + ## methods for displaying, adding, deleting, and manipulating voters + ## for a particular election + #################################################################### def new_voters @election = Election.find( params[:id] ) if params.has_key?[:raw_voter_list] @@ -102,21 +104,53 @@ class ElectionsController < ApplicationController voter.destroy end + ## methods for computing and printing results + #################################################################### + def results + @election = Election.find( params[:id] ) + votes = [] + + @election.voters.each do |voter| + if voter.vote and voter.vote.confirmed? + votes << voter.vote.rankings.sort.collect {|vote| vote.candidate_id} + end + end + + @voteobj = CloneproofSSDVote.new(votes) + @resultobj = @voteobj.result + @winners = @resultobj.winners + + @candidates_by_id = {} + @election.candidates.each {|cand| @candidates_by_id[cand.id] = cand} + end + + def detailed_results + + self.results + breakpoint + @voter_list = [] + @vote_list = [] + @election.voters. each do |voter| + if voter.vote and voter.vote.confirmed? + @voter_list << voter.email + @vote_list << voter.vote + end + end + + @vote_list.sort! + @vote_list.sort! { |a,b| a.token <=> b.token } + end + + ## private methods + #################################################################### private def process_incoming_voters(raw_voter_list) incoming_voters = RawVoterList.new( raw_voter_list ) - token_generator = UniqueTokenGenerator.new( 16 ) unless incoming_voters.entries.empty? incoming_voters.each do |new_voter| - until new_voter.password and \ - Voter.find_all( [ "password = ?", new_voter.password ]).empty? - new_voter.password = token_generator.token - end - - breakpoint if incoming_voters.email == 0 new_voter.contacted = 1 elsif incoming_voters.email == 1