class ElectionsController < ApplicationController
+ model :raw_voter_list, :voter, :vote, :candidate
+
+ ## general methods for dealing with elections
+ ####################################################################
def index
list
render :action => 'list'
@election_pages, @elections = paginate :elections, :per_page => 10
end
+ ## methods for displaying, creating,
+ ## and manipulating election overview data
+ ####################################################################
+
def show
@election = Election.find(params[:id])
end
def new
@election = Election.new
end
+
+ def edit
+ @election = Election.find(params[:id])
+ end
def create_election
@election = Election.new(params[:election])
end
end
+ def update
+ @election = Election.find(params[:id])
+ if @election.update_attributes(params[:election])
+ flash[:notice] = 'Election was successfully updated.'
+ redirect_to :action => 'show', :id => @election
+ else
+ render :action => 'edit'
+ end
+ end
+
+ def destroy
+ election = Election.find(params[:id]).destroy
+ redirect_to :action => 'list'
+ end
+
+ # methods fod display, adding, deleting, and manipulating candidate
+ # information for elections
+ ####################################################################
def new_candidates
@election = Election.find( params[:id] )
end
candidate.destroy
end
- def edit
- @election = Election.find(params[:id])
+ def edit_candidates
+ @election = Election.find( params[:id] )
end
- def edit_candidates
+ ## 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]
+ process_incoming_voters( params[:raw_voter_list] )
+ end
+ @raw_voter_list = RawVoterList.new
+
end
def edit_voters
@election = Election.find( params[:id] )
+ if params.has_key?( :raw_voter_list )
+ process_incoming_voters( params[:raw_voter_list] )
+ end
+
+ @raw_voter_list = RawVoterList.new
end
- def update
- @election = Election.find(params[:id])
- if @election.update_attributes(params[:election])
- flash[:notice] = 'Election was successfully updated.'
- redirect_to :action => 'show', :id => @election
- else
- render :action => 'edit'
+ def delete_voter
+ voter = Voter.find( params[:id] )
+ 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
- def destroy
- election = Election.find(params[:id]).destroy
- redirect_to :action => 'list'
+ @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 )
+
+ unless incoming_voters.entries.empty?
+ incoming_voters.each do |new_voter|
+
+ if incoming_voters.email == 0
+ new_voter.contacted = 1
+ elsif incoming_voters.email == 1
+ email_voter( new_voter )
+ new_voter.contacted = 1
+ else
+ new_voter.contacted = 0
+ end
+
+ # the new voter should be in good shape. save add to the election
+ new_voter.save
+ @election.voters << new_voter
+ end
+ end
+
+ # reset the next time to have a the same default value for emailing
+ @raw_voter_list = RawVoterList.new
+ @raw_voter_list.email = incoming_voters.email
+ end
+
+ def email_voter
+ end
+
end